// 根实例的created

// 用于获取基本数据，传入一个返回延迟对象的函数(使用在vuex里定义的action)，获取失败后重新尝试获取，最多尝试5次
function getBaseData(getDataHandler){
  return new Promise((resolve, reject) =>{
    var getCount = 0
    ;(function exec(){
      getDataHandler()
      .then(resolve)
      .catch(() => ++getCount < 6 ? exec() : reject())
    })()
  })
}

export default function(){
  // 创建一个钩子，代表城市及定位信息都已经初始化完成，如果有刚进入页面就需要这些信息的地方，必须监听该钩子
  window._locationReady = new Promise(async (resolve, reject) =>{
    await getBaseData(() => this.$store.dispatch('location/getCityList')).catch(reject)
    await this.$store.dispatch('location/getLocation').then(resolve)
  })

  getBaseData(() => this.$store.dispatch('user/load'))
}
